



#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include "lcd.h"
#include "time.h"

int * plcd = NULL; //指向映射后的内存的首地址(帧缓冲区首地址)
int fd_lcd; //屏幕文件描述符


/*
	LCD_Draw_Point: 画点 
	@x,y : 要画点的坐标
	@color: 颜色
*/
void LCD_Draw_Point(int x, int y, int color)
{
	if(x >= 0 && x < 800 && y >= 0 && y < 480)
	{
		*(plcd + 800*y + x) = color;
	}
	
}


/*
	LCD_Init: 用来初始显示屏
*/
void LCD_Init(void)
{
	//打开屏幕 
	fd_lcd = open("/dev/fb0", O_RDWR);
	if(fd_lcd == -1)
	{
		perror("open lcd error");
		return ;
	}
	
	//映射
	plcd = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE, MAP_SHARED, fd_lcd, 0);
	if(plcd == MAP_FAILED)
	{
		perror("mmap error");
		return ;
	}
	
}

/*
	LCD_Uninit:解初始化 
*/
void LCD_Uninit(void)
{
	munmap(plcd, 800*480*4);


	close(fd_lcd);
}

void LCD_Draw_All(void)
{
	for(int i=1;i<=800;i++)
		for(int j=1;j<=480;j++)
			LCD_Draw_Point(i, j, 0xFFFFFCC);
}

void LCD_Draw_Chessboard(void)
{
	for(int i=1;i<=800;i++)
		for(int j=1;j<=480;j++)
		{
			if(i>=60 && i%30==0 && i<=480 && j>=30 && j<=450)
				LCD_Draw_Point(i, j, 0x000000);
			if(j>=30 && j%30==0 && j<=450 && i>=60 && i<=480)
				LCD_Draw_Point(i, j, 0x000000);
		}
}

void yuan(int x,int y,int r,int color)
{
	for(int i=1;i<=800;i++)
		for(int j=1;j<=480;j++)
		{
			if( (i-x)*(i-x)+(j-y)*(j-y)<=r*r )
				LCD_Draw_Point(i, j, color);
		}
}

void LCD_Draw_All_white()
{
	for(int i=1;i<=800;i++)
		for(int j=1;j<=480;j++)
			LCD_Draw_Point(i, j, 0xFFFFFFF);
}













